iT邦幫忙

2024 iThome 鐵人賽

DAY 30
1
Python

時空序列分析-關鍵籌碼分析系列 第 30

番外篇3 - 簡單LSTM模型預測結果+策略回測 (暨30日完賽心得)

  • 分享至 

  • xImage
  •  

今天原本想做LSTM模型來預測籌碼資訊,但突然想到一個更想做的,

就是把模型預測的結果,再去結合交易策略(不一定要是前面的雙均線策略),

再進行回測,一個簡單的程式從收集、分析、預測、回測的整個流程就完成拉~

基於昨天subaru219這位朋友的提點,我也去嘗試了一下,

發現真的用5年的資料來進行預測能夠有很良好的預測效果!

這是用台積電2019年6月~2024年6月(如下圖)
https://ithelp.ithome.com.tw/upload/images/20240830/20168322VdTC8EIY1E.png

基於以上資料,這邊發明出一個基於預測結果的交易策略

valid = data[train_data_len:].copy()  # 使用.copy() 才不會動用到原本的資料
valid['Predictions'] = predictions
# 起始資金10萬
initial_cash = 100000
cash = initial_cash
stock = 0
valid['Cash'] = cash
valid['Stock'] = stock
valid['Total Value'] = cash

結合預測結果的交易策略(這邊是最有趣的地方)

這個策略的交易邏輯是這樣的:
一、買入操作:
如果模型預測的下一天股價 > 當天的收盤價,就 all in 買進股票。
二、賣出操作:
如果模型預測的下一天股價 < 當天的收盤價,就直接全部賣掉。

# 結合預測結果的交易策略
for i in range(1, len(valid)):
    if valid['Predictions'].iloc[i] > valid['Close'].iloc[i-1]:
        # 買進,每次都all in
        stock = cash / valid['Close'].iloc[i]
        cash = 0
    elif valid['Predictions'].iloc[i] < valid['Close'].iloc[i-1]:
        # 賣出,每次都全部清倉
        cash = stock * valid['Close'].iloc[i]
        stock = 0
    valid.loc[valid.index[i], 'Cash'] = cash
    valid.loc[valid.index[i], 'Stock'] = stock
    valid.loc[valid.index[i], 'Total Value'] = cash + stock * valid['Close'].iloc[i]
# 最終報酬
final_value = valid['Total Value'].iloc[-1]
print(f"Initial Cash: ${initial_cash}")
print(f"Final Portfolio Value: ${final_value}")
print(f"Total Return: {(final_value - initial_cash) / initial_cash * 100:.2f}%")

Initial Cash: $100000
Final Portfolio Value: $0
Total Return: -100.00%

這結果慘得令人心疼XDDDD 一定是交易策略不好,不然就是我哪裡寫錯了 :)

# 回測的结果把它視覺化
plt.figure(figsize=(16,8))
plt.title('Trading Strategy Backtest')
plt.xlabel('Date', fontsize=18)
plt.ylabel('Portfolio Value USD ($)', fontsize=18)
plt.plot(valid['Total Value'])
plt.legend(['Portfolio Value'], loc='lower right')
plt.show()

https://ithelp.ithome.com.tw/upload/images/20240830/20168322TGrdpCF35G.png

看有買進的地方,但是績效卻沒動,看來是哪裡有點問題,這邊就交給廣大觀眾們去解謎吧!
(自己也在解謎中)

其實後面我還有把前面的雙均線策略拿過來這邊進行結合,但是debug結果需要一點時間,
若還有時間,之後可以在這邊看到它後續的更新~

以上,這邊就是這30天以來做出來的各種大大小小有趣且實用,

但又有點好笑的python籌碼和股價的分析~

各位回見~



這邊有一點點小小的完賽心得想跟大家分享一下,其實全部寫完沒有太多的激動,
就是有一種一開始就相信自己可以完成的感覺!

雖然平時有讀書的習慣,但是除了做研究以外,
多了一個要寫文章的任務,還是對生活的安排產生了一些影響~
責任感倒是提醒著我不要忘記發文,而且這個規則是要求連續30天,
昨天因為差一點點,要是沒記起來,前面28天的努力就要明年再挑戰一次了。

這一個月以來有你們的陪伴,讓我有動力完成每天的文章。
要是想認識我,可以直接用這個帳號的名稱去搜尋,歡迎來交朋友~
要討論 IT 或是討論 Finance 我都可以,未來有緣再見!

再次謝謝看到這裡的每一位。

也很感謝我的朋友邀請我來參加鐵人賽,讓我知道原來自己也可以辦得到!

/images/emoticon/emoticon41.gif/images/emoticon/emoticon41.gif/images/emoticon/emoticon41.gif

每日記錄:
加權指數收在22268.09點,上漲66.24點。
祝各位前程似錦,生活幸福~


上一篇
番外篇2 - 用簡單的LSTM模型預測股價
下一篇
競賽結束,用來當作Q&A和文章留言回覆的文章
系列文
時空序列分析-關鍵籌碼分析31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言